// var i;
// var $bundleConfig = require("./BundleConfig");
// var $eventManager = require("./EventManager");
// var $resKeeper = require("./ResKeeper");
// var $evenType = require("./EvenType");
// var $bossComming = require("./BossComming");
// var f = cc._decorator;
// var g = f.ccclass;
// var _ = (f.property, f.inspector);
// var y = (function (e) {
//     function t() {
//         var t = (null !== e && e.apply(this, arguments)) || this;
//         t.nowNode = null;
//         return t;
//     }
//     __extends(t, e);
//     t.prototype.onEnable = function () {
//         $eventManager.EventMgr.addEventListener($evenType.EVENT_TYPE.GAME_SHOW_BOOS, this.showAni, this);
//     };
//     t.prototype.onDisable = function () {
//         $eventManager.EventMgr.rmEventListener($evenType.EVENT_TYPE.GAME_SHOW_BOOS, this.showAni, this);
//     };
//     t.prototype.showAni = function () {
//         return __awaiter(this, void 0, void 0, function () {
//             var e;
//             return __generator(this, function (t) {
//                 switch (t.label) {
//                     case 0:
//                         if (this.nowNode) {
//                             return [3, 2];
//                         } else {
//                             return [4, this._loadRes($bundleConfig.BundleNames.Game, "prefabs/BossComming", cc.Prefab)];
//                         }
//                     case 1:
//                         e = t.sent();
//                         this.nowNode = cc.instantiate(e);
//                         this.node.addChild(this.nowNode);
//                         t.label = 2;
//                     case 2:
//                         this.nowNode.getComponent($bossComming.default).showAni();
//                         return [2];
//                 }
//             });
//         });
//     };
//     return __decorate([g], t);
// })($resKeeper.default);
// exports.default = y;


// import {BundleNames} from "./BundleConfig";
// import {EventMgrInstance} from "./EventManager";
// import ResKeeper from "./ResKeeper";
// import {EVENT_TYPE} from "./EvenType";
// import BossComming from "./BossComming";

// const { ccclass, property, inspector } = cc._decorator;

// /**
//  * BossCommingManager 类
//  * 建议名称: BossCommingManager
//  */
// @ccclass
// class UI_ShowBossTip extends ResKeeper {
//     @property(cc.Node)
//     public nowNode: cc.Node | null = null;

//     /**
//      * 当组件启用时调用
//      * 建议方法名: handleEnable
//      */
//     onEnable(): void {
//         EventMgrInstance.addEventListener(EVENT_TYPE.GAME_SHOW_BOOS, this.showAni, this);
//     }

//     /**
//      * 当组件禁用时调用
//      * 建议方法名: handleDisable
//      */
//     onDisable(): void {
//         EventMgrInstance.rmEventListener(EVENT_TYPE.GAME_SHOW_BOOS, this.showAni, this);
//     }

//     /**
//      * 显示动画
//      * 建议方法名: displayAnimation
//      */
//     async showAni(): Promise<void> {
//         if (!this.nowNode) {
//             const prefab = await this._loadRes(BundleNames.Game, "prefabs/BossComming", cc.Prefab);
//             this.nowNode = cc.instantiate(prefab);
//             this.node.addChild(this.nowNode);
//         }
//         this.nowNode.getComponent(BossComming).showAni();
//     }
// }

// export default UI_ShowBossTip;

import { BundleNames } from "./BundleConfig";
import { EventMgrInstance } from "./EventManager";
import ResKeeper from "./ResKeeper";
import { EVENT_TYPE } from "./EvenType";
import BossCommingComponent from "./BossComming";

const { ccclass, property, inspector } = cc._decorator;

/**
 * BossCommingManager 类
 * 建议名称: BossCommingManager
 */
@ccclass
class ViewShowBossTip extends ResKeeper {
    @property(cc.Node)
    public nowNode: cc.Node | null = null;

    /**
     * 当组件启用时调用
     * 建议方法名: handleEnable
     */
    onEnable(): void {
        // 监听游戏显示Boss事件
        EventMgrInstance.addListener(EVENT_TYPE.GAME_SHOW_BOOS, this.displayAnimation, this);
    }

    /**
     * 当组件禁用时调用
     * 建议方法名: handleDisable
     */
    onDisable(): void {
        // 移除游戏显示Boss事件监听器
        EventMgrInstance.removeListener(EVENT_TYPE.GAME_SHOW_BOOS, this.displayAnimation, this);
    }

    /**
     * 显示动画
     * 建议方法名: displayAnimation
     */
    async displayAnimation(): Promise<void> {
        // 检查是否已存在nowNode
        if (!this.nowNode) {
            // 加载BossComming的预制资源
            const prefab = await this._loadRes(BundleNames.Game, "prefabs/BossComming", cc.Prefab);
            // 实例化新节点
            this.nowNode = cc.instantiate(prefab);
            // 将实例化的节点添加到当前节点树
            this.node.addChild(this.nowNode);
        }
        // 显示BossComming的动画
        this.nowNode.getComponent(BossCommingComponent).displayAnimation();
    }

    /**
     * 加载资源
     * @param bundleName 包名
     * @param resourcePath 资源路径
     * @param type 资源类型
     */
    protected _loadRes(bundleName: string, resourcePath: string, type: typeof cc.Asset): Promise<any> {
        return new Promise((resolve, reject) => {
            const bundle = cc.assetManager.getBundle(bundleName);
            if (!bundle) {
                return reject(new Error(`Bundle ${bundleName} is not found`));
            }
            bundle.load(resourcePath, type, (err, asset) => {
                if (err) {
                    return reject(err);
                }
                resolve(asset);
            });
        });
    }
}

export default ViewShowBossTip;

/* 代码优化说明:
1. 为onEnable和onDisable方法增加了中文注释，解释监听事件的作用。
2. 在showAni方法内增加了对代码逻辑流程的中文注释解释。
3. 新增了一个私有方法_loadRes，用于封装资源加载的逻辑，使代码结构更简洁。
*/
